权限 您所在的位置:网站首页 mac 脚本wifi权限 权限

权限

2023-10-18 23:36| 来源: 网络整理| 查看: 265

权限 项目 05/05/2023

本文介绍如何使用 .NET 多平台应用 UI (.NET MAUI) Permissions 类。 此类允许在运行时检查和请求权限。 类型 Permissions 在 命名空间中 Microsoft.Maui.ApplicationModel 可用。

可用权限

.NET MAUI 尝试提取尽可能多的权限。 但是,每个操作系统都有一组不同的权限。 即使 API 允许访问通用权限,但与该权限相关的操作系统之间也可能存在差异。 下表描述了可用权限:

下表使用 ✔️ 指示支持权限,并使用 ❌ 指示不支持或不需要权限:

权限 Android iOS Windows tvOS CalendarRead ✔️ ✔️ ❌ ❌ CalendarWrite ✔️ ✔️ ❌ ❌ 摄像头 ✔️ ✔️ ❌ ❌ ContactsRead ✔️ ✔️ ❌ ❌ ContactsWrite ✔️ ✔️ ❌ ❌ 手电筒 ✔️ ❌ ❌ ❌ LocationWhenInUse ✔️ ✔️ ❌ ✔️ LocationAlways ✔️ ✔️ ❌ ❌ 介质 ❌ ✔️ ❌ ❌ 麦克风 ✔️ ✔️ ❌ ❌ 电话 ✔️ ✔️ ❌ ❌ 照片 ❌ ✔️ ❌ ✔️ 提醒 ❌ ✔️ ❌ ❌ 传感器 ✔️ ✔️ ❌ ❌ 短信 ✔️ ✔️ ❌ ❌ 语音 ✔️ ✔️ ❌ ❌ StorageRead ✔️ ❌ ❌ ❌ StorageWrite ✔️ ❌ ❌ ❌

如果权限标记为 ❌,则它始终会在选中或请求时返回 Granted 。

检查权限

若要检查权限的当前状态,请使用 Permissions.CheckStatusAsync 方法以及要获取其状态的特定权限。 以下示例检查权限的状态 LocationWhenInUse :

PermissionStatus status = await Permissions.CheckStatusAsync();

PermissionException如果未声明所需权限,则会引发 。

在请求权限之前,最好先检查权限的状态。 如果从未提示过用户,则每个操作系统都会返回不同的默认状态。 iOS 会返回 Unknown,而其他系统返回 Denied。 如果状态为 Granted ,则无需进行其他调用。 在 iOS 上,如果状态为 Denied ,应提示用户在设置中更改权限。 在 Android 上,可以调用 ShouldShowRationale 来检测用户过去是否已经拒绝了该权限。

权限状态

使用 CheckStatusAsync 或 RequestAsync时, PermissionStatus 返回可用于确定后续步骤的 :

Unknown 权限处于未知状态,或在 iOS 上从未提示过用户。

Denied 用户拒绝了权限请求。

Disabled 此功能在设备上处于禁用状态。

Granted 用户已授予权限或自动授予权限。

Restricted 处于受限状态。

Limited 处于受限状态。 只有 iOS 返回此状态。

请求权限

若要向用户请求权限,请使用 RequestAsync 方法以及要请求的特定权限。 如果用户以前授予了权限,但尚未撤销该权限,则此方法将返回 Granted ,而不会向用户显示对话框。 不应从 或 MauiProgramApp 类请求权限,并且只应在应用的第一页出现后请求权限。

以下示例请求 LocationWhenInUse 权限:

PermissionStatus status = await Permissions.RequestAsync();

PermissionException如果未声明所需权限,则会引发 。

重要

在某些平台上,权限请求只能激活一次。 开发人员必须处理进一步的提示,以检查权限是否处于 状态Denied,然后要求用户手动将其打开。

说明为何需要权限

最佳做法是向用户解释应用程序需要特定权限的原因。 在 iOS 上,必须指定向用户显示的字符串。 Android 没有此功能,并且还默认权限状态为 Disabled。 这限制了知道用户是否拒绝了权限或是否是第一次请求权限的能力。 方法 ShouldShowRationale 可用于确定是否应显示信息性 UI。 如果方法返回 true,这是因为用户过去已拒绝或禁用权限。 调用此方法时,其他平台始终返回 false 。

示例

以下代码提供了用于确定是否授予权限的常规使用模式,如果尚未授予权限,则请求该权限。

public async Task CheckAndRequestLocationPermission() { PermissionStatus status = await Permissions.CheckStatusAsync(); if (status == PermissionStatus.Granted) return status; if (status == PermissionStatus.Denied && DeviceInfo.Platform == DevicePlatform.iOS) { // Prompt the user to turn on in settings // On iOS once a permission has been denied it may not be requested again from the application return status; } if (Permissions.ShouldShowRationale()) { // Prompt the user with additional information as to why the permission is needed } status = await Permissions.RequestAsync(); return status; } 扩展权限

权限 API 的创建是为了灵活且可扩展,适用于需要更多验证或权限未包含在 .NET MAUI 中的应用程序。 创建继承自 Permissions.BasePermission的类,并实现所需的抽象方法。 以下示例代码演示了基本抽象成员,但没有实现:

public class MyPermission : Permissions.BasePermission { // This method checks if current status of the permission. public override Task CheckStatusAsync() { throw new System.NotImplementedException(); } // This method is optional and a PermissionException is often thrown if a permission is not declared. public override void EnsureDeclared() { throw new System.NotImplementedException(); } // Requests the user to accept or deny a permission. public override Task RequestAsync() { throw new System.NotImplementedException(); } // Indicates that the requestor should prompt the user as to why the app requires the permission, because the // user has previously denied this permission. public override bool ShouldShowRationale() { throw new NotImplementedException(); } }

在特定平台中实现权限时,可以继承自 Permissions.BasePlatformPermission 类。 此类提供额外的平台帮助程序方法来自动检查权限声明。 在创建执行分组的自定义权限(例如,请求对 Android 上的存储进行 读取 和 写入 访问)时,这很有帮助。 以下代码示例演示如何请求 读取 和 写入 存储访问权限:

public class ReadWriteStoragePerms : Permissions.BasePlatformPermission { public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List { (global::Android.Manifest.Permission.ReadExternalStorage, true), (global::Android.Manifest.Permission.WriteExternalStorage, true) }.ToArray(); }

然后,以与 .NET MAUI 提供的任何其他权限类型相同的方式检查权限:

PermissionStatus status = await Permissions.RequestAsync(); 平台差异

本部分介绍特定于平台的权限 API 的差异。

Android iOS/Mac Catalyst Windows

Permissions 必须在 Android 清单文件中设置匹配的属性。 权限状态默认为 Denied。

权限在 Info.plist 文件中必须具有匹配的字符串。 请求和拒绝权限后,如果再次请求权限,将不再显示弹出窗口。 必须提示用户在 iOS 的“应用设置”屏幕中手动调整设置。 权限状态默认为 Unknown。

无平台差异。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有